#include "common.h"
#include "module_configure.h"

module_configure::module_configure(void)
{
	ZeroMemory(&ConfigInfo, sizeof(SRUNX_CONFIG_INFO));

	if(SUCCEEDED(SHGetFolderPath(NULL, CSIDL_APPDATA|CSIDL_FLAG_CREATE, NULL ,0, ConfigFile))) _tcscat_s(ConfigFile, TEXT("\\")); 
	else _tcscpy_s(ConfigFile, TEXT(""));
	_tcscat_s(ConfigFile, STRING_CONFIG_FILEPLACE);

	_tcscpy_s(ConfigAPP, STRING_CONFIG_APP);

	loadConfigInfo();
	
}

module_configure::~module_configure(void)
{
}

BOOL module_configure::getConfigInfo(SRUNX_CONFIG_INFO * info) {
	*info = ConfigInfo;
	return TRUE;
}
BOOL module_configure::setConfigInfo(SRUNX_CONFIG_INFO * info) {
	ConfigInfo = *info;
	return TRUE;
}
BOOL module_configure::saveConfigInfo() {
	TCHAR buffer[LENGTH_STRING_MAX_CONFIG];

	// username
	if (ConfigInfo.UIConfig & DWORD_CONFIG_SAVEUN) WritePrivateProfileString(ConfigAPP, STRING_CONFIG_KEY_UN, ConfigInfo.username, ConfigFile);
	else  WritePrivateProfileString(ConfigAPP, STRING_CONFIG_KEY_UN, NULL, ConfigFile);

	// password
	if (ConfigInfo.UIConfig & DWORD_CONFIG_SAVEPW) {
		_tcscpy_s(buffer, ConfigInfo.password);
		encrypt(buffer, TRUE);
		WritePrivateProfileString(ConfigAPP, STRING_CONFIG_KEY_PW, buffer, ConfigFile);
	}
	else  WritePrivateProfileString(ConfigAPP, STRING_CONFIG_KEY_PW, NULL, ConfigFile);

	_stprintf_s(buffer, TEXT("%x"), ConfigInfo.UIConfig);
	WritePrivateProfileString(ConfigAPP, STRING_CONFIG_KEY_CF, buffer, ConfigFile);

	_stprintf_s(buffer, TEXT("%d"), ConfigInfo.Mode);
	WritePrivateProfileString(ConfigAPP, STRING_CONFIG_KEY_MD, buffer, ConfigFile);
	return TRUE;
}

BOOL module_configure::loadConfigInfo() {
	TCHAR buffer[LENGTH_STRING_MAX_CONFIG];

	GetPrivateProfileString(ConfigAPP, STRING_CONFIG_KEY_CF, TEXT("0"), buffer, LENGTH_STRING_MAX_CONFIG, ConfigFile);
	_stscanf_s(buffer, TEXT("%x"), &ConfigInfo.UIConfig);

	GetPrivateProfileString(ConfigAPP, STRING_CONFIG_KEY_MD, TEXT("0"), buffer, LENGTH_STRING_MAX_CONFIG, ConfigFile);
	_stscanf_s(buffer, TEXT("%d"), &ConfigInfo.Mode);

	// username
	if (ConfigInfo.UIConfig & DWORD_CONFIG_SAVEUN) GetPrivateProfileString(ConfigAPP, STRING_CONFIG_KEY_UN, NULL, ConfigInfo.username, LENGTH_STRING_MAX_CONFIG, ConfigFile);

	// password
	if (ConfigInfo.UIConfig & DWORD_CONFIG_SAVEPW) {
		GetPrivateProfileString(ConfigAPP, STRING_CONFIG_KEY_PW, NULL, buffer, LENGTH_STRING_MAX_CONFIG, ConfigFile);
		encrypt(buffer, FALSE);
		_tcscpy_s(ConfigInfo.password, buffer);
	}

	return TRUE;
}

VOID module_configure::encrypt(TCHAR * buffer, BOOL type) {
	INT i;
	INT len = lstrlen(buffer);
	INT MidValue;
	TCHAR CHAR_Z = TEXT('z');
	TCHAR CHAR_0 = TEXT('0');
	if (type) {
		for (i=0; i<len; i++) {
			if (*(buffer+i) == 20) continue;
			MidValue = (CHAR_Z-*(buffer+i));
			MidValue = (MidValue + i*13)%75;
			*(buffer+i) = CHAR_0 + MidValue;
		}
	} else {
		for (i=0; i<len; i++) {
			if (*(buffer+i) == 20) continue;
			MidValue = (*(buffer+i) - CHAR_0);
			MidValue = (MidValue - i*13)%75;
			if (MidValue<0)  MidValue+=75;
			*(buffer+i) = CHAR_Z -MidValue;
		}
	}
}